package com.company.ljh.medium;

import com.company.ljh.utils.ListNode;

/**
 * @description:
 * 2130. 链表最大孪生和
 * 提示
 * 中等
 * 35
 * 相关企业
 * 在一个大小为 n 且 n 为 偶数 的链表中，对于 0 <= i <= (n / 2) - 1 的 i ，第 i 个节点（下标从 0 开始）的孪生节点为第 (n-1-i) 个节点 。
 *
 * 比方说，n = 4 那么节点 0 是节点 3 的孪生节点，节点 1 是节点 2 的孪生节点。这是长度为 n = 4 的链表中所有的孪生节点。
 * 孪生和 定义为一个节点和它孪生节点两者值之和。
 *
 * 给你一个长度为偶数的链表的头节点 head ，请你返回链表的 最大孪生和 。
 * @projectName:leet_code
 * @see:com.company.ljh.medium
 * @author:ljh
 * @createTime:2023/7/4 15:25
 * @version:1.0
 */
public class 链表最大孪生和 {
    public int pairSum(ListNode head) {
        //翻转后半链表//快慢指针
        ListNode fast = head;
        ListNode slow = head;
        while(fast != null){
            fast = fast.next.next;
            slow = slow.next;
        }
        ListNode halfHead = slow;
        ListNode pre = null;
        while(halfHead != null){
            ListNode thisNode = halfHead;
            ListNode nextNode = halfHead.next;
            halfHead.next = pre;
            pre = thisNode;
            halfHead = nextNode;
        }
        int max = 0;
        //同时遍历求和
        while(pre != null){
            int sum = pre.val+head.val;
            pre = pre.next;
            head = head.next;
            max = max>sum?max:sum;
        }
        return max;
    }
}
